perm filename ACK3.PAS[PAS,SYS] blob
sn#452529 filedate 1979-06-28 generic text, type T, neo UTF8
PROGRAM ACK3;
VAR
STACK:ARRAY[1..1000] OF INTEGER;
X,Y,STACK←COUNT,TIME,A:INTEGER;
PROCEDURE PUSH(K:INTEGER);
BEGIN
STACK←COUNT:=STACK←COUNT+1;
STACK[STACK←COUNT]:=K;
END (* OF PUSH *);
PROCEDURE POP(VAR K:INTEGER);
BEGIN
K:=STACK[STACK←COUNT];
STACK←COUNT:=STACK←COUNT-1;
END (* OF POP *);
FUNCTION ACKER(X,Y:INTEGER):INTEGER;
CONST
STACKEND=-1;
BEGIN
STACK←COUNT:=0;
PUSH(STACKEND);
REPEAT
IF X=0
THEN
BEGIN
POP(X); Y:=Y+1
END
ELSE
IF Y=0
THEN
BEGIN
Y:=1; X:=X-1
END
ELSE
BEGIN
PUSH(X-1); Y:=Y-1
END;
UNTIL X=STACKEND;
ACKER:=Y
END (* OF ACKER *);
(* HAUPTPROGRAMM *)
BEGIN
writeln(tty,'ackermann function');
WHILE TRUE DO BEGIN
WRITE(TTY,'X:');BREAK;
READ(TTY,X);
WRITE(TTY,'Y:'); BREAK;
READ(TTY,Y);
TIME:=CLOCK;
A:=ACKER(X,Y);
TIME:=CLOCK-TIME;
WRITELN(TTY,' ACKERMANN(',X:2,',',Y:2,')=',A:4);
WRITELN(TTY,' CPU-ZEIT=',TIME:6);
END
END.
(* OF PROGRAM *)